import jwt

from toutiao import Config

# 编码
# 三个参数:
    # payload   载荷:存放数据的部分
    # payload,中可以存放过期时间 exp
    # key   秘钥
    # algorithm 算法
# jwt.encode({"user_id":1,},"gaopeng",algorithm="HS256")

# 生成的token必须要有过期时间
def generic_token(payload,expiry,secret=None):
    """

    :param payload: 用户传递的字典数据
    :param expiry: 过期时间
    :param secret: 秘钥
    :return: token
    """
    # 1. 组织过期时间
    # 设置私有的
    _payload = {
        "exp":expiry
    }
    # 2. 将用户的字典数据,更新到字典中
    _payload.update(payload)

    # 3. 获取秘钥
    if secret is None:
        secret=Config.JWT_SECRET
    # 4. 返回token
    return jwt.encode(_payload,secret,algorithm="HS256").decode()



# 解码
def verify_token(token,secret=None):
    """
    验证token
    :param token: 用户传递的token
    :param secret: 秘钥
    :return: 返回payload
    """
    if secret is None:
        secret = Config.JWT_SECRET
    try:
        payload = jwt.decode(token,secret,algorithms=["HS256"])
    except jwt.PyJWTError:
        # 有异常返回None,过期或被篡改都属于异常
        return None
    else:
        return payload